$(() => {
    findAll();

    //阻止超链接默认事件。事件委托。冒泡机制。
    $(".paginate").on("click", "li>a", function (e) {
        e.preventDefault();//阻止默认事件
        let $a = $(this);
        let $li = $a.parent();

        if ($li.is(".first")) {//首页
            findAll(1, 20);
        } else if ($li.is(".last")) {//最后一页
            findAll(pages, 20);
        } else if ($li.is(".prev")) {//前一页
            let p = currentPage - 1;
            if (p < 1) {
                p = 1;
            }
            findAll(p, 20);
        } else if ($li.is(".next")) {//下一页
            let p = currentPage + 1;
            if (p > pages) {
                p = pages;
            }
            findAll(p, 20);
        } else {//数字页码
            findAll(parseInt($a.text()), 20);
        }
    });

    //查询按钮事件
    $("#search").click(function () {
        findAll(1, 20);
    });

    //删除按钮操作
    $("#tbl").on("click","#del",function () {
        let $tr = $(this).closest("tr");
        let id = $tr.find("td:first").text();
            layer.confirm("是否确认删除?", function (handler) {
                deleteByIds(parseInt(id), function (count) {
                    if (count > 0) {
                        layer.msg("删除操作成功，共删除" + count + "行");
                    } else {
                        layer.msg("删除操作失败");
                    }
                    findAll();
                });
                layer.close(handler);
            });
    });

    //新增按钮操作
    $("#add").click(function () {
        layer.open({
            title: "新增学生",
            content: ctx + "/admin/subject/add",
            type: 2,//2指iframe,
            area: ["550px", "500px"],
            btn: ["确定", "取消"],
            yes: function (handler, $jq) {
                const win = $jq.find("iframe")[0].contentWindow;
                win.submit(function (success) {
                    if (success) {
                        layer.msg("保存操作成功");
                        findAll();
                        layer.close(handler);
                    } else {
                        layer.msg("保存操作失败");
                    }
                });
            }
        });
    });

    //修改按钮操作
    $("#tbl").on("click","#edit",function () {
        let $tr = $(this).closest("tr");
        let id = $tr.find("td:first").text();
            layer.open({
                title: "修改学生",
                content: ctx + "/admin/subject/edit?id=" + id,
                type: 2,//2指iframe,
                area: ["550px", "500px"],
                btn: ["确定", "取消"],
                yes: function (handler, $jq) {
                    const win = $jq.find("iframe")[0].contentWindow;
                    win.submit(function (success) {
                        if (success) {
                            layer.msg("修改操作成功");
                            findAll();
                            layer.close(handler);
                        } else {
                            layer.msg("修改操作失败");
                        }
                    });
                }
            });
    });

});//结束


//删除
function deleteByIds(ids, cb = $.noop) {
    //请求，响应模型
    $.ajax({
        url: ctx + "/admin/subject/delete",
        method: "post",
        //添加此属性，表示可以向后台传递数组参数
        traditional: true,
        data: {
            ids
        },
        success(resp) {
            cb(resp.rows);
        }
    });
}

//查询条件
function buildSearchParams() {
    let name = $("#name").val();

    //查询参数对象
    const params = {
        name
    };

    return params;
}

//查询所有数据并显示。page指页码，limit指页面大小
function findAll(page = 1, limit = 20, params = buildSearchParams()) {
    //发出异步请求，响应的不是页面
    $.ajax({
        url: ctx + "/admin/subject/list",
        method: "post",
        data: {
            page,
            limit,
            ...params
        },
        //回调函数 callback
        success: function (resp) {
            let rows = resp.subjects;//科目对象集合
            let pi = resp.pi;//分页对象
            currentPage = pi.pageNo;
            pages = pi.pages;

            $("#tbl>tbody").empty();
            for (let i = 0; i < rows.length; i++) {
                let sub = rows[i];//一个科目对象
                let $tr = $("<tr>");

                $tr.append("<td>" + sub.id + "</td>");
                $tr.append("<td>" + sub.name + "</td>");
                $tr.append("<td>" + sub.description + "</td>");
                $tr.append("<div class='action'> <button type='button' id='edit'>修改</button> <button type='button' id='del'>删除</button> </div>");
                $("#tbl>tbody").append($tr);
            }

            //起始页
            const navPages = 5;//导航页总数
            let start = currentPage - parseInt(navPages / 2);
            if (start < 1) {
                start = 1;
            }
            //结束页
            let end = start + navPages - 1;
            if (end > pages) {
                end = pages;
                start = end - navPages + 1;
                if (start < 1) {
                    start = 1;
                }
            }

            //
            $(".paginate>li:not(.first,.last,.prev,.next)").remove();
            for (let i = start; i <= end; i++) {
                let $li = $("<li>");
                $li.append("<a href='#'>" + i + "</a>");
                $(".paginate>li.next").before($li);
            }

            //总记录数和总页数
            $(".paginate-div .total").text(pi.total);
            $(".paginate-div .pages").text(pi.pages);
        }
    });
}